#include "datasource.h"
#include "muestra.h"
#include "archivo.h"

DataSource::DataSource(bool integrar, bool calibrar, bool filtrar)
{
    index = 0;
    size = 1024;
    this->integrar = integrar;
    this->calibrar = calibrar;
    this->filtrar = filtrar;
}

double* DataSource::obtenerMuestra(fuenteDatos fuente)
{
    //Trabajar las posibles fuentes de datos como interfaces
    double array[size];
    double *valores;

    if(fuente == this->MEMORIA)
    {
        Muestra muestra;
        valores = muestra.leerDatos();
    }
    else if(fuente == this->ARCHIVO)
    {
        Archivo archivo;
        valores = archivo.leerDatos();
    }

    if(calibrar)
    {
        algoritmos.calibrar(valores);
    }

    double *val;
    if(filtrar)
    {
        val = algoritmos.filtrar(valores, size);
    }
    else
    {
        val = valores;
    }

    for(int i=0; i<size; i++)
    {
        if(calibrar && !filtrar)
        {
            array[i] = val[i] - algoritmos.getOffset();
        }
        else
        {
            array[i] = val[i];
        }
    }

    if(integrar)
    {
        for(int i=0; i<size; i++)
        {
            algoritmos.integrar(((int)array[i]));
        }
    }

    return array;

}

int DataSource::getSize()
{
    return size;
}

void DataSource::setSize(int value)
{
    this->size = value;
}

double DataSource::obtenerPosicion()
{
    return algoritmos.getPosicion();
}
